package com.lekang.system.task;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import com.lekang.system.service.IContractService;

import java.time.LocalDateTime;

/**
 * 合同状态定时任务
 * 每天凌晨1点执行，更新合同状态
 * 
 * @author 刘卓
 * @date 2025-01-15
 */
@Component
public class ContractStatusTask
{
    private static final Logger log = LoggerFactory.getLogger(ContractStatusTask.class);

    @Autowired
    private IContractService contractService;

    /**
     * 定时任务：每天凌晨1点执行
     * 更新所有非已失效状态的合同状态
     * 
     * ⚠️ 注意：如果启用了 Quartz 定时任务，请禁用此 Spring 定时任务，避免重复执行
     * 方式：注释掉下面的 @Scheduled 注解
     */
//        @Scheduled(cron = "*/10 * * * * ?") // 每10秒执行一次（测试用 - 已禁用）
//    @Scheduled(cron = "0 0 1 * * ?")  // 每天凌晨1点执行（生产环境）
    public void updateContractStatus()
    {
        try
        {
            log.info("开始执行合同状态更新定时任务，当前时间：{}", LocalDateTime.now());
            
            int updateCount = contractService.updateContractStatus();
            
            if (updateCount > 0)
            {
                log.info("合同状态更新完成，共更新 {} 条合同记录", updateCount);
            }
            else
            {
                log.info("合同状态更新完成，没有需要更新的合同记录");
            }
        }
        catch (Exception e)
        {
            log.error("合同状态更新定时任务执行失败", e);
        }
    }

    /**
     * 手动触发状态更新（用于测试）
     */
    public void manualUpdateContractStatus()
    {
        log.info("手动触发合同状态更新");
        updateContractStatus();
    }
}
